package com.itheima.wms.utils;

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.Date;
import java.util.Map;

public class JwtUtil {

    public static final String secret = "123456";

    public static final Long expiration = 2 * 60 * 60 * 1000L;

    /**
     * 生成令牌
     *
     * @param claims
     * @return
     */
    public static String createJwt(Map<String, Object> claims) {
        String jwt = Jwts.builder()
                //设置签名算法
                .signWith(SignatureAlgorithm.HS512, Base64.getEncoder().encode(secret.getBytes(StandardCharsets.UTF_8)))
                //设置JWT的载荷信息
                .addClaims(claims)
                //设置JWT令牌的过期时间
                .setExpiration(new Date(System.currentTimeMillis() + expiration))
                //生成令牌
                .compact();
        return jwt;
    }

    /**
     * 解析JWT令牌
     * @param jwt
     * @return
     */
    public static Map<String, Object> parseJwt(String jwt) {
        try {
            return Jwts.parser()
                    //设置秘钥
                    .setSigningKey(Base64.getEncoder().encode(secret.getBytes(StandardCharsets.UTF_8)))
                    //解析JWT
                    .parseClaimsJws(jwt)
                    //获取令牌内容(载荷部分)
                    .getBody();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}
